﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Kohvik.Kohvikuteenus;
using AjaxControlToolkit;
using System.Diagnostics;

namespace Kohvik {

    public partial class WebForm7 : System.Web.UI.Page {
        
        const int maxPortsSoodus = 6;   //kui mitu portsude või soodustuste lahtrit kasutaja saab maksimaalselt tekitada

        ServiceClient klient = new ServiceClient();
        List<EntityValuuta> valuutad;

        int kasutaja_ID, kohviku_ID;
        string aeg, id;

        protected void Page_Load(object sender, EventArgs e) {
            muudatusedSuccess.Visible = false;            

            if (Session["kasutaja_ID"] == null || Session["kohviku_ID"] == null) {
                Response.Redirect("admin.aspx");
            }

            int sess_kohvikuID = -1;
            if (!(int.TryParse(Session["kasutaja_ID"].ToString(), out kasutaja_ID) && int.TryParse(Session["kohviku_ID"].ToString(), out sess_kohvikuID))) {
                Response.Redirect("admin.aspx");
            }

            Boolean isSuperUser = (klient.getUserRoleId(kasutaja_ID) == 2);
            if (isSuperUser) {
                PH_sisestaUusKohvik.Visible = true;
            }

            if (Request["kohvikID"] == null) {
                panel_muuda.Visible = false;
                return;
            }
            else
                id = Request["kohvikID"];

            if (!(int.TryParse(Request["kohvikID"].ToString(), out kohviku_ID))) {
                panel_muuda.Visible = false;
                return;
            }

            if (isSuperUser) {
                //tegemist on administraatoriga, kellel on õigused kõigi kohvikute andmete muutmiseks
            }
            else {
                //kontrollime, kas sisselogitud kasutajal on õigused soovitud kohviku andmete muutmiseks
                if (kohviku_ID != sess_kohvikuID) {
                    panel_muuda.Visible = false;
                    return;
                }
            }

            kohvikuNimi.Text = klient.getEntityKohvikById(Convert.ToInt32(id)).Nimi;

            if (Request["aeg"] == null) {
                DateTime dt = System.DateTime.Now;
                aeg = dt.ToString("yyyy-MM-dd");
            }
            else aeg = Request["aeg"];

           
            string scriptText = "<script type='text/javascript'>function dateSelectionChanged(sender, args) { __doPostBack(\"muudaDate\",\"" + 0.ToString() + "\");  }</script>";
            this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScript", scriptText);           

            if (!IsPostBack) {
                if (!loadMenuByKohvikId(kohviku_ID, aeg))
                    PlaceHolder2.Controls.Add(new LiteralControl(@"<p style='font-size:16px; margin-top:30px; margin-left:20px;'>Pole midagi kuvada</p>"));

                kuvaSisestusOsa();
                tbKohvikuKirjeldus.Text = klient.getKohvikuKirjeldus(id);
            }

            if (Request.Form["__EVENTTARGET"] != null) {
                string s = Request.Form["__EVENTTARGET"];
                string[] str;
                int i;               
                switch (s) {
                    case "lisaports":
                        i = int.Parse(Request.Form["__EVENTARGUMENT"]);
                        ButtonLisaPorts_Click(i);
                        break;                
                    case "eemaldaports":
                        str = (Request.Form["__EVENTARGUMENT"]).Split('&');
                        i = int.Parse(str[0]);
                        int k = int.Parse(str[1]);
                        ButtonEemaldaPorts_Click(i, k);
                        break;
                    case "lisasoodustus":
                        i = int.Parse(Request.Form["__EVENTARGUMENT"]);
                        ButtonLisaSoodukas_Click(i);
                        break;
                    case "muudaDate":
                        i = int.Parse(Request.Form["__EVENTARGUMENT"]);
                        muudaDate(i);
                        break;
                    case "eemaldasoodustus":
                        str = (Request.Form["__EVENTARGUMENT"]).Split('&');
                        i = int.Parse(str[0]);
                        int l = int.Parse(str[1]);
                        ButtonEemaldaSoodukas_Click(i, l);
                        break;
                    case "lisatoit":
                        ButtonLisaToit_Click();
                        break;
                    case "lisakaubad":
                        lisaKaubad();
                        break;
                    case "muudatoit":
                        i = int.Parse(Request.Form["__EVENTARGUMENT"]);
                        muudaKaup(i);
                        break;
                    case "kustutatoit":
                        i = int.Parse(Request.Form["__EVENTARGUMENT"]);
                        kustutaKaup(i);
                        break;
                    case "muudasaadavus":
                        i = int.Parse(Request.Form["__EVENTARGUMENT"]);
                        muudaSaadavus(i);
                        break;
                    default: break;
                }
            }
        }


        protected void btnLisaUusKohvik_Click(object sender, EventArgs e) {
            Kohvikuteenus.EntityKohvik uusKohvik = new Kohvikuteenus.EntityKohvik() {
                Nimi = TB_nimetus.Text,
                Latitude = TB_lat.Text,
                Longitude = TB_long.Text,
                Riik = TB_riik.Text,
                Maakond = TB_maakond.Text,
                LinnVald = TB_linnVald.Text,
                Indeks = Int32.Parse(TB_indeks.Text),
                Tanav = TB_tanav.Text,
                Maja = TB_maja.Text,
                Kirjeldus = TB_kirjeldus.Text
            };

            klient.lisaUusKohvik(uusKohvik);
            Response.Redirect("muudatused.aspx");
        }


        /// <summary>
        /// kasutatakse lehe esmakordseks (!postback) koostamiseks
        /// </summary>
        private void kuvaSisestusOsa() {
            valuutad = klient.getCurrency();

            TB_kuup.Text = aeg;

            TextBox tmp;
            Button b;

            PlaceHolder1.Controls.Add(new LiteralControl("<div id='toit'>"));
            PlaceHolder1.Controls.Add(new LiteralControl("<p><span>Nimi: &nbsp;&nbsp;"));
            tmp = new TextBox();
            tmp.ID = "toit0_nimi";
            AutoCompleteExtender autoCompKaup = new AutoCompleteExtender();
            autoCompKaup.TargetControlID = tmp.ID;
            autoCompKaup.ServiceMethod = "getKaupNimed";
            autoCompKaup.MinimumPrefixLength = 1;
            autoCompKaup.CompletionInterval = 200;
            autoCompKaup.UseContextKey = true;
            autoCompKaup.ContextKey = kohviku_ID.ToString();
            PlaceHolder1.Controls.Add(tmp);
            PlaceHolder1.Controls.Add(autoCompKaup);

            PlaceHolder1.Controls.Add(new LiteralControl("<span style='margin-left:40px;'>Kategooria: &nbsp;&nbsp;"));
            tmp = new TextBox();
            tmp.ID = "toit0_kat";
            AutoCompleteExtender autoCompKat = new AutoCompleteExtender();
            autoCompKat.TargetControlID = tmp.ID;
            autoCompKat.ServiceMethod = "getKatNimed";
            autoCompKat.MinimumPrefixLength = 1;
            autoCompKat.CompletionInterval = 200;
            PlaceHolder1.Controls.Add(tmp);
            PlaceHolder1.Controls.Add(autoCompKat);
            PlaceHolder1.Controls.Add(new LiteralControl("</span>"));

            PlaceHolder1.Controls.Add(new LiteralControl("</span></p><br/><div style='margin-left:50px'><span style='color:green;'>Portsud: </span>"));
            lisaPorts(0, 0);

            b = new Button();
            b.ID = "toit0_lisaports";
            b.Text = "lisa veel üks ports";
            b.CssClass = "btn_lisaPorts";
            b.OnClientClick = "javascript:__doPostBack(\"lisaports\",\"" + 0.ToString() + "\");";
            PlaceHolder1.Controls.Add(b);
            PlaceHolder1.Controls.Add(new LiteralControl("</div>")); //end portsud

            PlaceHolder1.Controls.Add(new LiteralControl("<br/><div style='margin-left:50px'><span style='color:green;'>Soodustused: </span>"));
            lisaSoodustus(0, 0);

            b = new Button();
            b.ID = "toit0_lisasoodustus";
            b.Text = "lisa veel üks soodustus";
            b.OnClientClick = "javascript:__doPostBack(\"lisasoodustus\",\"" + 0.ToString() + "\");";
            PlaceHolder1.Controls.Add(b);
            PlaceHolder1.Controls.Add(new LiteralControl("</div>"));

            PlaceHolder1.Controls.Add(new LiteralControl("</div>"));
            PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));   //toit

            ViewState.Add("toidud", 1);
            ViewState.Add("toit0_portsud", 1);
            ViewState.Add("toit0_soodukad", 1);

        } //end kuvaSisestusOsa


        /// <summary>
        /// kasutatakse postbacki korral lehe dünaamilseks koostamiseks
        /// </summary>
        private void koostaLeht() {
            if (!loadMenuByKohvikId(kohviku_ID, aeg))
                PlaceHolder2.Controls.Add(new LiteralControl(@"<p style='font-size:16px; margin-top:30px; margin-left:20px;'>Pole midagi kuvada</p>"));

            valuutad = klient.getCurrency();

            TextBox tmp;
            Button b;
            
            int toite = Int32.Parse(ViewState["toidud"].ToString());
            for (int i = 0; i < toite; i++) {
                int portse = Int32.Parse(ViewState["toit" + i + "_portsud"].ToString());
                int soodukaid = Int32.Parse(ViewState["toit" + i + "_soodukad"].ToString());
                
                PlaceHolder1.Controls.Add(new LiteralControl("<div id='toit'>"));
                PlaceHolder1.Controls.Add(new LiteralControl("<p><span>Nimi: &nbsp;&nbsp;"));
                tmp = new TextBox();
                tmp.EnableViewState = false;
                tmp.ID = "toit" + i + "_nimi";
                AutoCompleteExtender autoCompKaup = new AutoCompleteExtender();
                autoCompKaup.TargetControlID = tmp.ID;
                autoCompKaup.ServiceMethod = "getKaupNimed";
                autoCompKaup.MinimumPrefixLength = 1;
                autoCompKaup.CompletionInterval = 200;
                autoCompKaup.UseContextKey = true;
                autoCompKaup.ContextKey = kohviku_ID.ToString();
                PlaceHolder1.Controls.Add(tmp);
                PlaceHolder1.Controls.Add(autoCompKaup);
                PlaceHolder1.Controls.Add(new LiteralControl("<span style='margin-left:40px;'>Kategooria: &nbsp;&nbsp;"));
                tmp = new TextBox();
                tmp.ID = "toit" + i + "_kat";
                AutoCompleteExtender autoCompKat = new AutoCompleteExtender();
                autoCompKat.TargetControlID = tmp.ID;
                autoCompKat.ServiceMethod = "getKatNimed";
                autoCompKat.MinimumPrefixLength = 1;
                autoCompKat.CompletionInterval=200;
                PlaceHolder1.Controls.Add(tmp);
                PlaceHolder1.Controls.Add(autoCompKat);
                PlaceHolder1.Controls.Add(new LiteralControl("</span>"));
                PlaceHolder1.Controls.Add(new LiteralControl("</p>"));


                PlaceHolder1.Controls.Add(new LiteralControl("</span></p><br/><div style='margin-left:50px'><span style='color:green;'>Portsud: </span>"));
                for (int k = 0; k < portse; k++) {
                    lisaPorts(i, k);
                }

                b = new Button();
                b.ID = "toit" + i + "_lisaports";
                b.Text = "lisa veel üks ports";
                b.CssClass = "btn_lisaPorts";
                b.OnClientClick = "javascript:__doPostBack(\"lisaports\",\"" + i.ToString() + "\");";
                PlaceHolder1.Controls.Add(b);
                PlaceHolder1.Controls.Add(new LiteralControl("</div>"));

                PlaceHolder1.Controls.Add(new LiteralControl("<br/><div style='margin-left:50px'><span style='color:green;'>Soodustused: </span>"));                
                for (int l = 0; l < soodukaid; l++) {
                    lisaSoodustus(i, l);
                }

                b = new Button();
                b.ID = "toit" + i + "_lisasoodustus";
                b.Text = "lisa veel üks soodustus";
                b.OnClientClick = "javascript:__doPostBack(\"lisasoodustus\",\"" + i.ToString() + "\");";
                PlaceHolder1.Controls.Add(b);
                PlaceHolder1.Controls.Add(new LiteralControl("</div>"));    //soodustused

                PlaceHolder1.Controls.Add(new LiteralControl("</div>"));    //toit
                PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
            }
        }


        private void lisaPorts(int i, int k) {
            TextBox tmp;
            DropDownList tmp2;
            PlaceHolder1.Controls.Add(new LiteralControl("<p><span class='muudatusedEsimene'>Nimi: &nbsp;</span>"));
            tmp = new TextBox();
            tmp.ID = "toit" + i + "_ports" + k + "_nimi";
            PlaceHolder1.Controls.Add(tmp);
            PlaceHolder1.Controls.Add(new LiteralControl("<span class='muudatused'>Hind: &nbsp;</span>"));
            tmp = new TextBox();
            tmp.ID = "toit" + i + "_ports" + k + "_hind";      
            PlaceHolder1.Controls.Add(tmp);
            PlaceHolder1.Controls.Add(new LiteralControl("<span class='muudatused'>Valuuta: &nbsp;</span>"));
            tmp2 = new DropDownList();
            foreach (EntityValuuta item in valuutad) {
                tmp2.Items.Add(item.Nimetus);
            }
            tmp2.ID = "toit" + i + "_ports" + k + "_valuuta";
            PlaceHolder1.Controls.Add(tmp2);
            PlaceHolder1.Controls.Add(new LiteralControl("<span class='muudatused'>Saadaval: &nbsp;</span>"));
            tmp2 = new DropDownList();
            tmp2.Items.Add("Jah");
            tmp2.Items.Add("Ei");
            tmp2.ID = "toit" + i + "_ports" + k + "_saadavus";
            PlaceHolder1.Controls.Add(tmp2);
            ImageButton btn = new ImageButton();
            btn.ImageUrl = @"images/ico_delete.png";
            btn.Height = 20;
            btn.OnClientClick = "javascript:__doPostBack(\"eemaldaports\",\"" + i + "&" + k + "\");";
            btn.AlternateText = "Kustuta see ports";
            btn.ToolTip = "Kustuta see ports";
            btn.CssClass = "icon_eemaldaPorts";
            PlaceHolder1.Controls.Add(btn);
            PlaceHolder1.Controls.Add(new LiteralControl("</p>"));   
        }


        private void lisaSoodustus(int i, int l) {
            TextBox tmp;
            DropDownList tmp2;
            PlaceHolder1.Controls.Add(new LiteralControl("<p><span class='muudatusedEsimene'>Nimi: &nbsp;</span>"));
            tmp = new TextBox();
            tmp.ID = "toit" + i + "_soodus" + l + "_nimi";
            PlaceHolder1.Controls.Add(tmp);
            PlaceHolder1.Controls.Add(new LiteralControl("<span class='muudatused'>Suurus: &nbsp;</span>"));
            tmp = new TextBox();
            tmp.ID = "toit" + i + "_soodus" + l + "_suurus";
            PlaceHolder1.Controls.Add(tmp);
            PlaceHolder1.Controls.Add(new LiteralControl("<span class='muudatused'>Ühik: &nbsp;</span>"));
            tmp2 = new DropDownList();
            tmp2.Items.Add("%");
            foreach (EntityValuuta item in valuutad) {
                tmp2.Items.Add(item.Nimetus);
            }
            tmp2.ID = "toit" + i + "_soodus" + l + "_yhik";
            PlaceHolder1.Controls.Add(tmp2);
            ImageButton btn = new ImageButton();
            btn.ImageUrl = @"images/ico_delete.png";
            btn.Height = 20;
            btn.OnClientClick = "javascript:__doPostBack(\"eemaldasoodustus\",\"" + i + "&" + l + "\");";
            btn.AlternateText = "Kustuta see soodustus";
            btn.ToolTip = "Kustuta see soodustus";            
            PlaceHolder1.Controls.Add(btn);
            PlaceHolder1.Controls.Add(new LiteralControl("</p>"));
        }


        protected void Button1_Click(object sender, EventArgs e) {
            klient.newKohvikuKirjeldus(tbKohvikuKirjeldus.Text, id);
            tbKohvikuKirjeldus.Text = klient.getKohvikuKirjeldus(id);
            muudatusedSuccess.Visible = true;
            koostaLeht();
        }


        protected void ButtonLisaPorts_Click(int i) {
            int tmp = Int32.Parse(ViewState["toit" + i + "_portsud"].ToString());
            if (tmp < maxPortsSoodus) {
                ViewState["toit" + i + "_portsud"] = tmp + 1;
            }
            koostaLeht();
        }


        protected void ButtonEemaldaPorts_Click(int i, int k) {
            int tmp = Int32.Parse(ViewState["toit" + i + "_portsud"].ToString());

            System.Reflection.MethodInfo WritableMethod;
            System.Reflection.MethodInfo ReadOnlyMethod;
            System.Reflection.BindingFlags Flags = System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static;

            WritableMethod = Request.Form.GetType().GetMethod("MakeReadWrite", Flags);
            ReadOnlyMethod = Request.Form.GetType().GetMethod("MakeReadOnly", Flags);

            //System.Reflection.FieldInfo FormField = Request.GetType().GetField("_form", Flags);

            WritableMethod.Invoke(Request.Form, null);
        
            if (tmp > 0) {
                //kui ports eemaldatakse teiste vahelt, siis tuleb kastide sisu ka ühe võrra ümber tõsta
                for (k = k + 1; k < tmp; k++) {
                    Request.Form["ctl00$MainContent$toit" + i + "_ports" + (k - 1) + "_nimi"] = Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_nimi"];
                    Request.Form["ctl00$MainContent$toit" + i + "_ports" + (k - 1) + "_hind"] = Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_hind"];
                    Request.Form["ctl00$MainContent$toit" + i + "_ports" + (k - 1) + "_valuuta"] = Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_valuuta"];
                    Request.Form["ctl00$MainContent$toit" + i + "_ports" + (k - 1) + "_saadavus"] = Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_saadavus"];
                }
                ViewState["toit" + i + "_portsud"] = tmp - 1;
            }
            koostaLeht();
        }


        protected void ButtonLisaSoodukas_Click(int i) {
            int tmp = Int32.Parse(ViewState["toit" + i + "_soodukad"].ToString());
            if (tmp < maxPortsSoodus) {
                ViewState["toit" + i + "_soodukad"] = tmp + 1;
            }
            koostaLeht();
        }


        protected void ButtonEemaldaSoodukas_Click(int i, int l) {
            int tmp = Int32.Parse(ViewState["toit" + i + "_soodukad"].ToString());

            System.Reflection.MethodInfo WritableMethod;
            System.Reflection.MethodInfo ReadOnlyMethod;
            System.Reflection.BindingFlags Flags = System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static;

            WritableMethod = Request.Form.GetType().GetMethod("MakeReadWrite", Flags);
            ReadOnlyMethod = Request.Form.GetType().GetMethod("MakeReadOnly", Flags);

            //System.Reflection.FieldInfo FormField = Request.GetType().GetField("_form", Flags);

            WritableMethod.Invoke(Request.Form, null);

            if (tmp > 0) {
                //kui soodukas eemaldatakse teiste vahelt, siis tuleb kastide sisu ka ühe võrra ümber tõsta
                for (l = l + 1; l < tmp; l++) {
                    Request.Form["ctl00$MainContent$toit" + i + "_soodus" + (l - 1) + "_nimi"] = Request.Form["ctl00$MainContent$toit" + i + "_soodus" + l + "_nimi"];
                    Request.Form["ctl00$MainContent$toit" + i + "_soodus" + (l - 1) + "_suurus"] = Request.Form["ctl00$MainContent$toit" + i + "_soodus" + l + "_suurus"];
                    Request.Form["ctl00$MainContent$toit" + i + "_soodus" + (l - 1) + "_yhik"] = Request.Form["ctl00$MainContent$toit" + i + "_soodus" + l + "_yhik"];                    
                }
                ViewState["toit" + i + "_soodukad"] = tmp - 1;
            }
            koostaLeht();
        }


        protected void ButtonLisaToit_Click() {
            int i = Int32.Parse(ViewState["toidud"].ToString());
            int i2;
            if (!int.TryParse(Request.Form["ctl00$MainContent$tb_toitudearv"], out i2)) {
                koostaLeht();
            }
            int k;
            if (!int.TryParse(Request.Form["ctl00$MainContent$tb_portsudearv"], out k)) {
                koostaLeht();
            }
            int l;
            if (!int.TryParse(Request.Form["ctl00$MainContent$tb_soodukatearv"], out l)) {
                koostaLeht();
            }

            i2 = i + i2;
            for (; i < i2; i++) {
                ViewState["toit" + i + "_portsud"] = k;
                ViewState["toit" + i + "_soodukad"] = l;
            }

            ViewState["toidud"] = i2;
            
            koostaLeht();
        }


        protected void muudaDate(int i) {
            aeg = TB_kuup.Text;
            Response.Redirect("muudatused.aspx?kohvikID=" + kohviku_ID + "&aeg=" + aeg);
        }


        protected void muudaKaup(int i) {
            Response.Redirect("muudatoitu.aspx?olID="+i);
        }


        protected void kustutaKaup(int i) {
            if (!klient.deleteItemByOlemineId(i)) {
                //TODO: veateated
            }
            koostaLeht();
        }


        protected void muudaSaadavus(int i) {
            if (!klient.toggleAvailability(i)) {
                //TODO: veateated
            }
            koostaLeht();            
        }

        
        private void lisaKaubad() {
            valuutad = klient.getCurrency();

            string date = Request.Form["ctl00$MainContent$TB_kuup"];
            DateTime tmp;
            if (!DateTime.TryParse(date, out tmp)) {
                return;
            }

            int i = Int32.Parse(ViewState["toidud"].ToString()) - 1;

            List<EntityKaup> kaubad = new List<EntityKaup>(i + 1);
            for (; i>=0; i--) {
                List<EntityPorts> portsud;
                List<EntitySoodustus> soodukad;

                int k = Int32.Parse(ViewState["toit" + i + "_portsud"].ToString()) - 1;
                int l = Int32.Parse(ViewState["toit" + i + "_soodukad"].ToString()) - 1;

                portsud = new List<EntityPorts>(k + 1);
                for(; k>=0; k--) {
                    portsud.Add(new EntityPorts { 
                        Nimetus = Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_nimi"],
                        Hind = Double.Parse(Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_hind"], new System.Globalization.CultureInfo("en-US")),
                        Valuuta_ID = valuutad.Find(item => item.Nimetus.Equals(Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_valuuta"])).Id,
                        Saadaval = toBool(Request.Form["ctl00$MainContent$toit" + i + "_ports" + k + "_saadavus"])
                    });
                }   //END for k

                soodukad = new List<EntitySoodustus>(l + 1);
                for (; l>=0; l--) {
                    soodukad.Add(new EntitySoodustus {
                        Liik = Request.Form["ctl00$MainContent$toit" + i + "_soodus" + l + "_nimi"],
                        Suurus = Double.Parse(Request.Form["ctl00$MainContent$toit" + i + "_soodus" + l + "_suurus"], new System.Globalization.CultureInfo("en-US")),
                        Yhik = Request.Form["ctl00$MainContent$toit" + i + "_soodus" + l + "_yhik"]
                    });
                }   //END for l

                kaubad.Add(new EntityKaup {
                    Nimetus = Request.Form["ctl00$MainContent$toit" + i + "_nimi"],
                    Kategooria = new EntityKategooria { Nimetus = Request.Form["ctl00$MainContent$toit" + i + "_kat"] },
                    portsjonid = portsud,
                    soodukad = soodukad
                });

            }       //END for i
            
            foreach (EntityKaup item in kaubad) {
                klient.insertItem(1, item.Kategooria.Nimetus, item.Nimetus, date, item.portsjonid, item.soodukad);
            }

            if (Request["aeg"]==null)
                Response.Redirect("muudatused.aspx?kohvikID=" + kohviku_ID);
            else Response.Redirect("muudatused.aspx?kohvikID=" + kohviku_ID + "&aeg=" + aeg);

        }   //END lisaKaubad()


        private bool toBool(string p) {
            if (p.Equals("Jah")) {
                return true;
            }
            else {
                return false;
            }
        }
        

        private bool loadMenuByKohvikId(int id, string date) {

            ImageButton btn;    //hiljem on seda mitu korda vaja

            List<EntityKaup> kaubad = klient.getItemData(id, date);                        
            if (kaubad == null)
                return false;

            List<EntityValuuta> valuutad = klient.getCurrency();
            
            PlaceHolder2.Controls.Add(new LiteralControl(@"<div id='cafeMenuContent'>"));            

            Dictionary<String, KatInf> kategooriad = new Dictionary<string,KatInf>();                      

            //kogub tabeli veergude nimed ja sorteerib kaubad kategooriate järgi
            foreach (EntityKaup kaup in kaubad) {
                KatInf inf;
                if (!kategooriad.ContainsKey(kaup.Kategooria.Nimetus)) {
                    inf = new KatInf();
                    //inf.TColumn.Add("ID", 0);                            //TODO: rakenduse lõplikus versioonis see veerg eemaldada
                    inf.TColumn.Add("Nimetus", 1);
                    kategooriad.Add(kaup.Kategooria.Nimetus, inf);
                }
                else inf = kategooriad[kaup.Kategooria.Nimetus];


                inf.Kaubad.Add(kaup);

                if (kaup.portsjonid != null) { 
                    int veeruNr = inf.TColumn.Count;                         //hangib lisatava veeru järjekorranumbri
                    foreach (EntityPorts ports in kaup.portsjonid) {
                        if (!inf.TColumn.Keys.Contains(ports.Nimetus)) {
                            inf.TColumn.Add(ports.Nimetus, veeruNr);
                            veeruNr++;
                        }
                    }  
                }   //END if portsjonid != null         
            }       //END foreach kaubad

            int count = 0;
            //käib kõik kategooriad läbi
            foreach (KeyValuePair<String, KatInf> kat in kategooriad) {
                PlaceHolder2.Controls.Add(new LiteralControl("<p id='kategooria'>" + kat.Key + "</p>"));   //lisab kategooria pealkirja
                Table t = new Table();
                t.CssClass = "tabel";
                TableRow tr = new TableRow();
                TableCell tc;
                TableHeaderCell thc;
                foreach (String s in kat.Value.TColumn.Keys) {             //lisab tabelisse veergude nimed
                    thc = new TableHeaderCell();               
                    thc.Text = s;
                    tr.Cells.Add(thc);
                }
                t.Rows.Add(tr);

                
                //käib kõik selle kategooria kaubad läbi
                foreach (EntityKaup k in kat.Value.Kaubad) {             

                    tr = new TableRow();

                    tc = new TableCell();
                    tc.Text = k.Nimetus;
                    
                    tc.CssClass = "alignleft";
                    tr.Cells.Add(tc);
                     
                    //täidab tabeli tühjade tsellukatega                   
                    for (int i = tr.Cells.Count; i < kat.Value.TColumn.Count; i++) {
                        TableCell tmp = new TableCell();
                        tr.Cells.Add(tmp);
                    }

                    if(k.portsjonid != null) {
                        //käib portsjonid läbi ja lisab need tabeli õigesse veergu
                        foreach (EntityPorts ports in k.portsjonid) {
                            int cellNr = kat.Value.TColumn[ports.Nimetus];
                            String valuutaSymbol;
                            try {
                                valuutaSymbol = valuutad.Find(item => item.Id == ports.Valuuta_ID).Lyhend;
                            }
                            catch (Exception) {
                                valuutaSymbol = "";      //kui ei leia vastavat valuutat, siis ei kirjutagi tabelisse valuutasid
                            }
                        
                            //tr.Cells[cellNr].Text = ports.Hind.ToString() + valuutaSymbol;
                            tr.Cells[cellNr].Controls.Add(new LiteralControl(ports.Hind.ToString() + valuutaSymbol));

                            btn = new ImageButton();
                            btn.ImageUrl = @"images/muudaSaadavus.png";
                            btn.Height = 20;
                            btn.CssClass = "nuppSaadaval";
                            btn.AlternateText = "Muuda saadavus";
                            btn.ToolTip = "Muuda saadavus";
                            btn.OnClientClick = "javascript:__doPostBack(\"muudasaadavus\",\"" + ports.Ports_ID + "\");";
                            tr.Cells[cellNr].Controls.Add(btn);

                            if (!ports.Saadaval) {
                                tr.Cells[cellNr].CssClass = "otsas";
                            }
                            else {
                                tr.Cells[cellNr].CssClass = "aligncenter";
                            }
                        
                            if (k.soodukad != null) { 
                                foreach (EntitySoodustus soodukas in k.soodukad) {
                                    if (soodukas.Yhik.Equals("%")) {
                                        //tr.Cells[cellNr].Text += "<br />" + soodukas.Liik + ": " + Math.Round((ports.Hind - ports.Hind * soodukas.Suurus / 100), 2, MidpointRounding.AwayFromZero) + valuutaSymbol;
                                        tr.Cells[cellNr].Controls.Add(new LiteralControl("<br />" + soodukas.Liik + ": " + Math.Round((ports.Hind - ports.Hind * soodukas.Suurus / 100), 2, MidpointRounding.AwayFromZero) + valuutaSymbol));
                                    }
                                    else if (soodukas.Yhik.Equals(valuutaSymbol)) {
                                        //tr.Cells[cellNr].Text += "<br />" + soodukas.Liik + ": " + Math.Round((ports.Hind - soodukas.Suurus), 2, MidpointRounding.AwayFromZero) + valuutaSymbol;
                                        tr.Cells[cellNr].Controls.Add(new LiteralControl("<br />" + soodukas.Liik + ": " + Math.Round((ports.Hind - soodukas.Suurus), 2, MidpointRounding.AwayFromZero) + valuutaSymbol));
                                    }
                                }
                            }
                            tr.CssClass = "aligncenter";
                        }                        
                    }
                    
                    tc = new TableCell();
                    btn = new ImageButton();
                    btn.ImageUrl = @"images/ico_edit.png";
                    btn.Height = 25;
                    btn.AlternateText = "Muuda";
                    btn.ToolTip = "Muuda";
                    btn.OnClientClick = "javascript:__doPostBack(\"muudatoit\",\"" + k.Olemine_ID + "\");";
                    tc.Controls.Add(btn);

                    btn = new ImageButton();
                    btn.ImageUrl = @"images/ico_delete.png";
                    btn.Height = 25;
                    btn.AlternateText = "Kustuta";
                    btn.ToolTip = "Kustuta";
                    btn.OnClientClick = "javascript:__doPostBack(\"kustutatoit\",\"" + k.Olemine_ID + "\");";
                    tc.Controls.Add(btn);

                    tc.CssClass = "noBorder";
                    tr.Cells.Add(tc);
                    t.Rows.Add(tr);
                    count++;
                }
                PlaceHolder2.Controls.Add(t);                
            }

    
            PlaceHolder2.Controls.Add(new LiteralControl(@"</div>"));
            

            return true;
        }   //end loadmenubykohvikID


        private class KatInf {
            private List<EntityKaup> kaubad = new List<EntityKaup>();
            public List<EntityKaup> Kaubad {
                get { return kaubad; }
                set { kaubad = value; }
            }

            private Dictionary<String, int> tColumn = new Dictionary<string, int>();
            public Dictionary<String, int> TColumn {
                get { return tColumn; }
                set { tColumn = value; }
            }
        } //end katInf


        #region autocomplete
        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] getKaupNimed(string prefixText, int count, string contextKey) {
            int id;
            if (!(int.TryParse(contextKey, out id))) {
                return null;
            }
            ServiceClient teenus = new ServiceClient();
            List<string> tmp = teenus.getKaupNimed(id, prefixText);
            if(tmp == null) {
                return null;
            }
            return tmp.ToArray();
        }


        [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] getKatNimed(string prefixText, int count) {
            ServiceClient teenus = new ServiceClient();
            List<string> tmp = teenus.getKatNimed(prefixText);
            if (tmp == null) {
                return null;
            }
            return tmp.ToArray();
        }
        #endregion

    }

}